/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package remotep2p;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.websocket.CloseReason;
import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
/**
*
* @author jasamer
*/
@ServerEndpoint("/discovery")
public class DiscoveryEndpoint {
/// Logger to write to server logs.
private static final Logger LOGGER = Logger.getLogger(DiscoveryEndpoint.class.getName());
@OnOpen
public void onOpen(Session session, EndpointConfig conf) throws IOException {
LOGGER.log(Level.INFO, "Discovery connection opened {0}", conf);
}
@OnMessage
public void binaryMessage(byte[] data, Session session) throws IOException {
RemoteP2PPacket packet = RemoteP2PPacket.packetFromData(data);
if (packet == null) {
LOGGER.log(Level.WARNING, "Discovery connection received invalid data.");
return;
}
switch (packet.type) {
case RemoteP2PPacket.START_ADVERTISEMENT:
ConnectionManager.getInstance().startAdvertisingPeer(packet.uuid, session);
break;
case RemoteP2PPacket.STOP_ADVERTISEMENT:
ConnectionManager.getInstance().stopAdvertisingPeer(packet.uuid, session);
break;
case RemoteP2PPacket.START_BROWSING:
ConnectionManager.getInstance().startSendingDiscoveryUpdates(session);
break;
case RemoteP2PPacket.STOP_BROWSING:
ConnectionManager.getInstance().stopSendingDiscoveryUpdates(session);
break;
default:
LOGGER.log(Level.WARNING, "Discovery connection received invalid packet. You may only send START_ADVERTISEMENT and STOP_ADVERTISEMENT packets to the server.");
}
}
/**
* Called when a RemotePeer closes the connection to the server.
* Informs other RemotePeers about the peer loss.
* @param session WebSocket session of the RemotePeer
* @param closeReason Reason why a web socket has been closed.
* @throws java.io.IOException
*/
@OnClose
public void onClose(Session session, CloseReason closeReason) throws IOException {
LOGGER.log(Level.INFO, "Discovery connection closed {0}", closeReason);
ConnectionManager.getInstance().removeDiscoveryConnection(session);
}
@OnError
public void onError(Session session, Throwable t) throws IOException {
LOGGER.log(Level.INFO, "Error occured {0}", t);
ConnectionManager.getInstance().removeDiscoveryConnection(session);
}
}